import time

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By

'''
    selenium框架破解反爬
    腾讯新闻获取数据的方式是ajax异步传输：
    访问网页的时候服务器将网页框架返回给客户端，在与客户端交互的过程中通过异步ajax技术传输数据包到客户端，
    呈现在网页上，爬虫直接抓取的话信息为空。

    解决：
    通过浏览器的开发者工具，监控网络请求，并分析
    用selenium完成爬虫

'''


# 验收前注意：浏览器打开之后记得退出再运行，需要验证码就重启浏览器


def open_browser():
    # 实例化
    # .exe是MicrosoftEdge浏览器驱动，用来启动浏览器
    # 指定 Edge 驱动程序的路径
    service = Service(executable_path='./msedgedriver.exe')
    driver = webdriver.Edge(service=service)

    ##driver = webdriver.Edge(executable_path='./msedgedriver.exe')

    # 窗口最大化
    driver.maximize_window()
    # 腾讯新闻搜索关键词'遇龙河'结果网址:没有加https报错
    driver.get('https://new.qq.com/search?query=%E9%81%87%E9%BE%99%E6%B2%B3&page=1')
    time.sleep(3)
    # 通过css选择器在网页上定位到文章列表元素
    elements = driver.find_elements(By.CSS_SELECTOR, '.card-margin.img-text-card')
    ##elements = driver.find_elements_by_css_selector('.card-margin.img-text-card')

    if elements is None:
        print('没到找文章列表元素！')
        return
    time.sleep(3)
    # 遍历当前页面文章列表, 打印元素的文本内容
    for element in elements:
        print(element.text)


if __name__ == "__main__":
    open_browser()
